import { mySliceCreator } from '../mySliceCreator.ts';
import { PayloadAction } from '@reduxjs/toolkit';

export type AsyncSliceType = {
  value: number;
  bool: boolean;
};

const init: AsyncSliceType = {
  value: 0,
  bool: false,
};

export const asyncSlice = mySliceCreator({
  name: 'asyncSlice',
  initialState: init,
  reducers: {
    increment: state => {
      state.value += 1;
    },
    update: (state, { payload }: PayloadAction<number>) => {
      state.value += payload;
    },
    decrement: state => {
      state.value -= 1;
    },
  },
  selectors: {
    selectBool: s => s.bool,
  },
});

export const {
  buildSelector,
  useAsyncSliceDispatch,
  selectors,
  useAsyncSliceActions,
} = asyncSlice;

/** Генерирует кортеж из хука и функции селектора. Хук для компонентов, функция для использования с getState() или тестов
 * Аргументом в buildSelector передаем обычную функцию селектор, которую обычно передаем в useSelector */
export const [useSelectValue, selectValue] = buildSelector(s => s.value);

export const { selectBool } = selectors;
